/**
 * printOddTimesNum 一个数组中，寻找两个出现奇数次的不同的数 
 */
public class printOddTimesNum {

    public static void printOddTimesNum2(int[] arr) {
        int eor = 0;
        for (int i : arr) {
            eor ^= i;
        }
        // eor = a ^ b
        // eor != 0
        // eor必然有一个位置上是1
        int rightOne = eor & (~eor + 1);
        int onlyOne = 0; // eor'
        for (int cur : arr) {
            if ((cur & rightOne) == 1) {
                onlyOne ^= cur;
            }
        }
        System.out.println(onlyOne + " " + (eor ^ onlyOne));
    }

    public static void main(String[] args) {
        int[] arr = {1,3,4,5,2,5,2,3, 1, 7};
        printOddTimesNum2(arr);
    }
}